It is well known in the field of communications to transfer data from a sending computer to a receiving computer via a communications link. Such a communications link may be established over a network via dedicated telephone lines or physical cables or over a temporarily established connection via a telephone line. Where the communications link is established between two computers over a telephone line, the communications link between the two computers is typically defined as shown in FIG. 1, which is a block diagram of a prior art computer system. In the prior art computer system shown in FIG. 1, a receiving computer 100 is connected to a receiving modem (modulator/demodulator) 110. The receiving modem 110 communicates over a telephone line with a sending modem 112 that is connected to a sending computer 115. The sending computer 115 sends the data to the receiving computer 100 by first sending digital data to the sending modem 112, which encodes the digital data into a signal sent over the telephone line using frequency modulation techniques. The receiving modem 110 demodulates the signal to extract the digital data from the signal and sends the digital data to the receiving computer 100.
Typical modem-to-modem communication, such as that described above with reference to FIG. 1, is asynchronous. That is, the receiving computer 100 cannot predict the timing of the arrival of the data because the data arrives asynchronously relative to the clock of the receiving computer 100. Because of this, the receiving computer 100 stores in a memory 120 a number of communications protocols 122 which control the flow of the data. Each of the protocols 122 are implemented as an executable computer program performed by a CPU 130 in the receiving computer to control the flow of the data from the communications link to the CPU 130 via an I/O Control 140. The protocols 122 are typically provided by an application program 150 (shown separately in the memory 120) and called by the application program as subprograms of the application program 150.
Each protocol 122 described above requires a corresponding protocol buffer 124 in the memory 120 in which to store the data while transient between the computer and communications interface. Each protocol buffer 124 is a separate physical buffer which represents a physical block of memory of a fixed size in, for example, a data segment provided for the corresponding protocol. Each protocol 122 stores the transient data in its corresponding protocol buffer until it determines, in accordance with its own requirements, that the transient data can be passed on to a next protocol, to the computer, or to the modem, as appropriate. Typically, the separate buffers 124 have been each implemented with a block of memory allocated by an operating system (not shown) executing on the CPU 130. Thus, operation of n protocols 122 by the prior art computer system requires n memory allocations of enough memory to implement n buffers 124. When each protocol 122 receives data from the modem 110, the CPU 130 or a previously executed one of the protocols 122, the protocol writes that data into its corresponding buffer 124. Thus, the transfer of data between the computer 100 and receiving modem 110 under control of the n protocols 122 also requires the computer 110 to write and rewrite the same data n times.